package com.atguigu.decorator;

/**
 * @program: design-patterns
 * @author: yangshen
 * @description: 咖啡店点咖啡
 * @create: 2022-02-17 17:13
 **/
public class CoffeeBar {
    public static void main(String[] args) {
        //需求：装饰者模式下的订单，2份巧克力+一份牛奶的LongBlack

        //1.点一份美式咖啡LongBlack（在new的时候，把美式咖啡的默认值传递到了父类Drink属性中）
        Drink order = new LongBlack();
        System.out.println("-------------开始---------------");
        System.out.println("美式咖啡费用=" + order.cost());
        System.out.println("美式咖啡描述=" + order.getDes());

        //2.order 加入一份牛奶
        System.out.println("-------------加入一份牛奶---------------");
        order = new Milk(order);
        System.out.println("order 加入一份牛奶 费用=" + order.cost());
        System.out.println("order 加入一份牛奶 描述=" + order.getDes());

        //3.加入一份巧克力
        System.out.println("-------------加入一份巧克力---------------");
        order = new Chocolate(order);
        System.out.println("order 加入一份巧克力 费用=" + order.cost());
        System.out.println("order 加入一份巧克力 描述=" + order.getDes());

        //4.加入一份巧克力
        System.out.println("-------------加入二份巧克力---------------");
        order = new Chocolate(order);
        System.out.println("order 加入二份巧克力 费用=" + order.cost());
        System.out.println("order 加入二份巧克力 描述=" + order.getDes());

        //第二笔订单
        System.out.println("===============第二笔订单：无因咖啡 - 测试策略模式，体会策略模式的好处=============================");

        System.out.println("----------------1.点一份无因咖啡------------------------");
        Drink order2 = new Decaf();
        System.out.println("无因咖啡 费用=" + order2.cost());
        System.out.println("无因咖啡 描述=" + order2.getDes());

        System.out.println("----------------2.加入一份牛奶------------------------");
        order2 = new Milk(order2);
        System.out.println("order2 无因咖啡 加入1份牛奶 费用=" + order2.cost());
        System.out.println("order2 无因咖啡 加入1份牛奶 描述=" + order2.getDes());


    }
}
